package main

import (
	"database/sql"
	"fmt"
	_ "github.com/Go-SQL-Driver/Mysql"
)

const (
	ip       = "localhost:32306"
	user     = "root"
	password = "mysql123"
	database = "test"
)

func insert(db *sql.DB) {
	stmt, err := db.Prepare("insert  into test_table(id, name) values (?,?)")
	CheckErr(err)
	res, err := stmt.Exec(1, "wanglei")
	CheckErr(err)
	id, err := res.LastInsertId()
	fmt.Println("LastInsertId:", id)

}

//查询demo
func query(db *sql.DB) {
	rows, err := db.Query("SELECT * FROM test_table")
	CheckErr(err)
	columns, _ := rows.Columns() // columns:  [id name]
	//根据string数组切片的长度构造scanArgs、values两个数组，scanArgs的每个值指向values相应值的地址
	scanArgs := make([]interface{}, len(columns))
	values := make([]interface{}, len(columns))
	for i := range values {
		scanArgs[i] = &values[i]
	}
	for rows.Next() {
		//将查询到的字段名的地址复制到scanArgs数组中
		err = rows.Scan(scanArgs...)
		CheckErr(err)
		//将行数据保存到record字典
		record := make(map[string]string)
		for i, col := range values {
			if col != nil {
				//字段名 = 字段信息
				record[columns[i]] = string(col.([]byte))
			}
		}
		fmt.Println(record)
	}
}

//更新demo
func update(db *sql.DB) {
	//准备更新操作
	stmt1, err := db.Prepare("UPDATE test_table SET name=? WHERE id=?")
	CheckErr(err)
	//执行更新操作
	res1, err := stmt1.Exec("wanglei2", 1)
	CheckErr(err)
	//查询更新多少条信息
	num, err := res1.RowsAffected()
	CheckErr(err)
	fmt.Println(num)
}

//删除demo
func remove(db *sql.DB) {
	//准备删除操作
	stmt, err := db.Prepare(`DELETE FROM test_table WHERE id=?`)
	CheckErr(err)
	//执行删除操作
	res, err := stmt.Exec(1)
	CheckErr(err)
	//查询删除多少条信息
	num, err := res.RowsAffected()
	CheckErr(err)
	fmt.Println(num)
}

//检查错误信息
func CheckErr(err error) {
	if err != nil {
		panic(err)
	}
}

//func main() {
//	db, err := sql.Open("mysql", user+":"+password+"@tcp("+ip+")/"+database)
//	CheckErr(err)
//	insert(db)
//	db.Close()
//}
